package com.demo.controller;


import cn.hutool.core.collection.CollUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;


@RequestMapping("huTool")
@RestController
public class CollUtilDemo {


    @GetMapping("demoOne")
    public String demoOne(){
        System.err.println("YES");
        return "ok";
    }

    /**
     * 方法说明:    集合工具 CollUtil
     * @param
     * @return java.lang.String
     * @version v1.0
     * @author 梁阿龙
     * @date 2022-07-29 13:16*/
    @GetMapping("getList")
    public String getList(){
        List<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        list.add("555");
        String first = CollUtil.getFirst(list);
        return first;
    }

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        list.add("555");
        /**
         * 方法说明:    集合工具 CollUtil
         */

        //获取集合第一个值
        String first = CollUtil.getFirst(list);
        System.out.println(first);
        //在集合之间拼接指定字符串
        String str = CollUtil.join(list, "--");
        System.out.println(str);

        /**
         * 方法说明:    将给定的多个集合放到一个列表（List）中，
         * 根据给定的Comparator对象排序，
         * 然后分页取数据。这个方法非常类似于数据库多表查询后排序分页，
         * 这个方法存在的意义也是在此。sortPageAll2功能和sortPageAll的使用方式和结果是 一样的，
         * 区别是sortPageAll2使用了BoundedPriorityQueue这个类来存储组合后的列表，不知道哪种性能更好一些，
         * 所以就都保留了。使用此方法，栗子如下：
         */

        //Integer比较器
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };

        List<Integer> list1 = CollUtil.newArrayList(155, 24, 355);
        List<Integer> list2 = CollUtil.newArrayList(4565, 55, 6);
        List<Integer> list3 = CollUtil.newArrayList(73, 8, 9);

        List<Integer> list4 = CollUtil.newArrayList(11, 12, 23);
        List<Integer> result = CollUtil.sortPageAll(0, 6, comparator, list1, list2, list3, list4);
        System.out.println(result);


        //创建新的对象
        HashMap<Object, Object> objectObjectHashMap = CollUtil.newHashMap();
        HashSet<String> set = CollUtil.newHashSet();
        ArrayList<Integer> listA = CollUtil.newArrayList();


        Integer[] integers = new Integer[]{1, 2, 3, 4};
        //将数组转换成集合
        ArrayList<Integer> integers2 = CollUtil.toList(integers);

        System.out.println(integers2);
        //在给定数组里末尾加一个元素，其实List.add()也是这么实现的，这个方法存在的意义是只有少量的添加元素时使用，
        // 因为内部使用了System.arraycopy,每调用一次就要拷贝数组一次。这个方法也是为了在某些只能使用数组的情况下使用，
        // 省去了先要转成List，添加元素，再转成Array
        /*
         *   index 无所谓后面的下标，超过最大长度则会添加至最后
         *  */
        List<Integer> integers1 = (List<Integer>) CollUtil.setOrAppend(integers2, 4, 3);

        System.out.println(integers1);

        System.out.println("---------------------------------------------------------------------------------------");

        //将两个集合合并
        Collection<Integer> integers3 = CollUtil.addAll(list1, list2);
        System.out.println(integers3);

        System.out.println(CollUtil.addAll(list3, CollUtil.addAll(list1, list2)));

        System.out.println(CollUtil.isEmpty(integers1));
        System.out.println(CollUtil.isNotEmpty(integers2));


        //此方法也是来源于Python的一个语法糖，给定两个集合，然后两个集合中的元素一一对应，成为一个Map。
        // 此方法还有一个重载方法，可以传字符，然后给定分分隔符，字符串会被split成列表。栗子：
        String[] keys = new String[]{"a", "b", "c"};
        Integer[] values = new Integer[]{1, 2, 3};
        Map<String, Integer> map = CollUtil.zip(CollUtil.toList(keys), CollUtil.toList(values));
        System.out.println(map);    // {b=2, c=3, a=1}

        String a = "a,b,c";
        String b = "1,2,3";
        Map<String, String> map2 = CollUtil.zip(a, b, ",");
        System.out.println(map2);

        System.out.println("---------------------------------------------------------------------------------bh");


    }


}
